﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.OleDb;
using System.Data;
using DTO;

namespace DAO
{
    public class CongDoanVienDAO
    {
        private static int themCDV(OleDbCommand cmd, CongDoanVienDTO CDVienDto, NgayChuyenDenDTO NgayCDenDto, NgayChuyenDiDTO NgayCDiDto)
        {
            int rs = 0;
            string query = "insert into Cong_Doan_Vien values(?, ?, ?,?,?,?,?,?,?,?, ?, ?,?,?,?,?,?,?)";
            cmd.CommandText = query;

            cmd.Parameters.Add("@MaCDV", OleDbType.VarChar);
            cmd.Parameters.Add("@HoTen", OleDbType.VarWChar);
            cmd.Parameters.Add("@NgaySinh", OleDbType.Date);
            cmd.Parameters.Add("@GioiTinh", OleDbType.VarWChar);
            cmd.Parameters.Add("@DiaChi", OleDbType.VarWChar);
            cmd.Parameters.Add("@SoDT", OleDbType.VarChar);
            cmd.Parameters.Add("@SoTheDV", OleDbType.VarChar);
            cmd.Parameters.Add("@NgayVaoCD", OleDbType.Date);
            cmd.Parameters.Add("@LaDangVien", OleDbType.Boolean);
            cmd.Parameters.Add("@Ngach", OleDbType.Integer);
            cmd.Parameters.Add("@HeSoLuong", OleDbType.Double);
            cmd.Parameters.Add("@TinhTrang", OleDbType.VarWChar);
            cmd.Parameters.Add("@TrinhDoVanHoa", OleDbType.VarWChar);
            cmd.Parameters.Add("@ChuyenMonNghiepVu", OleDbType.VarWChar);
            cmd.Parameters.Add("@LyLuanChinhTri", OleDbType.VarWChar);
            cmd.Parameters.Add("@TonGiao", OleDbType.Integer);
            cmd.Parameters.Add("@DanToc", OleDbType.Integer);
            cmd.Parameters.Add("@ToCongDoan", OleDbType.Integer);

            cmd.Parameters["@MaCDV"].Value = CDVienDto.MaCDV;
            cmd.Parameters["@HoTen"].Value = CDVienDto.HoTen;
            cmd.Parameters["@NgaySinh"].Value = CDVienDto.NgaySinh;
            cmd.Parameters["@GioiTinh"].Value = CDVienDto.GioiTinh;
            cmd.Parameters["@DiaChi"].Value = CDVienDto.DiaChi;
            cmd.Parameters["@SoDT"].Value = CDVienDto.SoDienThoai;
            cmd.Parameters["@SoTheDV"].Value = CDVienDto.SoTheDoanVien;
            cmd.Parameters["@NgayVaoCD"].Value = CDVienDto.NgayVaoCongDoan;
            cmd.Parameters["@LaDangVien"].Value = CDVienDto.LaDangVien;
            cmd.Parameters["@Ngach"].Value = CDVienDto.Ngach;
            cmd.Parameters["@HeSoLuong"].Value = CDVienDto.HeSoLuong;
            cmd.Parameters["@TinhTrang"].Value = CDVienDto.TinhTrang;
            cmd.Parameters["@TrinhDoVanHoa"].Value = CDVienDto.TrinhDoVanHoa;
            cmd.Parameters["@ChuyenMonNghiepVu"].Value = CDVienDto.ChuyenMonNghiepVu;
            cmd.Parameters["@LyLuanChinhTri"].Value = CDVienDto.LyLuanChinhTri;
            cmd.Parameters["@TonGiao"].Value = CDVienDto.TonGiao;
            cmd.Parameters["@DanToc"].Value = CDVienDto.DanToc;
            cmd.Parameters["@ToCongDoan"].Value = CDVienDto.ToCongDoan;

            rs = cmd.ExecuteNonQuery();

            if (rs != 0)
            {
                for (int i = 0; i < CDVienDto.ChucVu.Count; i++)
                {
                    cmd.CommandText = String.Format("insert into CongDoanVien_ChucVu values ('{0}', '{1}')", CDVienDto.MaCDV, CDVienDto.ChucVu[i].MaChucVu);
                    cmd.ExecuteNonQuery();
                }

                if (NgayCDenDto.MaCDV != "")
                {
                    string queryNCDen = String.Format("insert into Ngay_Chuyen_Den values ('{0}', '{1}', '{2}')", NgayCDenDto.MaCDV, NgayCDenDto.NgayChuyenDen, NgayCDenDto.LyDoChuyenDen);
                    cmd.CommandText = queryNCDen;

                    cmd.ExecuteNonQuery();
                }

                if (NgayCDiDto.MaCDV != "")
                {
                    string queryNCDi = String.Format("insert into Ngay_Chuyen_Di values ('{0}', '{1}', '{2}')", NgayCDiDto.MaCDV, NgayCDiDto.NgayChuyenDi, NgayCDiDto.LyDoChuyenDi);
                    cmd.CommandText = queryNCDi;

                    cmd.ExecuteNonQuery();
                }
            }
            return rs;
        }
        public static int Them(CongDoanVienDTO CDVienDto, NgayChuyenDenDTO NgayCDenDto, NgayChuyenDiDTO NgayCDiDto)
        {
            //Tao va mo mot ket noi to co so du lieu
            int rs = 0;
            using (OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi())
            {
                cnn.Open();
                //Tao doi tuong OleDbCommand tuong ung voi ket noi da mo
                using (OleDbCommand cmd = cnn.CreateCommand())
                {
                     //Khai bao mot transaction
                    OleDbTransaction transaction = cnn.BeginTransaction();
                    cmd.Transaction = transaction;

                    try
                    {
                        rs = themCDV(cmd, CDVienDto, NgayCDenDto, NgayCDiDto);
                    }
                    catch
                    {
                        transaction.Rollback();
                        if (cnn.State == ConnectionState.Open)
                        {
                            cnn.Close();
                        }
                        throw new Exception("thao tác thêm công đoàn viên bị lỗi");
                    }
                transaction.Commit();
                cnn.Close();
                }
            }
            return rs;
        }

        public static int Xoa(string maCDV)
        {
            int rs = 0;
            //Tao va mo mot ket noi to co so du lieu
            using (OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi())
            {
                cnn.Open();
                //Tao doi tuong OleDbCommand tuong ung voi ket noi da mo
                using (OleDbCommand cmd = cnn.CreateCommand())
                {
                    //Khai bao mot transaction
                    OleDbTransaction transaction = cnn.BeginTransaction();
                    cmd.Transaction = transaction;

                   try
                    {
                        string query = "";
                        NgayChuyenDenDTO ngCDenDto = NgayChuyenDenDAO.TimKiem(maCDV);
                        if (ngCDenDto.MaCDV != "")
                        {
                            query = String.Format("delete from Ngay_Chuyen_Den where MaCDV = '{0}'", maCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        NgayChuyenDiDTO ngCDiDto = NgayChuyenDiDAO.TimKiem(maCDV);
                        if (ngCDiDto.MaCDV != "")
                        {
                            query = String.Format("delete from Ngay_Chuyen_Di where MaCDV = '{0}'", maCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        List<int> lstChucVu = CongDoanVienDAO.TimKiemChucVu(maCDV);
                        if (lstChucVu.Count > 0)
                        {
                            query = String.Format("delete from CongDoanVien_ChucVu where MaCDV = '{0}'", maCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        query = String.Format("delete from Cong_Doan_Vien where MaCDV = '{0}'", maCDV);
                        cmd.CommandText = query;
                        rs = cmd.ExecuteNonQuery();
                    }
                    catch
                    {
                        transaction.Rollback();
                        if (cnn.State == ConnectionState.Open)
                        {
                            cnn.Close();
                        }
                        throw new Exception("thao tác xóa công đoàn viên bị lỗi");
                    }
                    transaction.Commit();
                    cnn.Close();
                }
            }
            return rs;
        }

        public static int Sua(CongDoanVienDTO CDVienDto, NgayChuyenDenDTO NgayCDenDto, NgayChuyenDiDTO NgayCDiDto, bool blnChucVu, bool blnNgayCDen, bool blnNgayCDi)
        {
            int rs = 0;
            //Tao va mo mot ket noi to co so du lieu
            using (OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi())
            {
                cnn.Open();
                //Tao doi tuong OleDbCommand tuong ung voi ket noi da mo
                using (OleDbCommand cmd = cnn.CreateCommand())
                {
                    //Khai bao mot transaction
                    OleDbTransaction transaction = cnn.BeginTransaction();
                    cmd.Transaction = transaction;

                   try
                    {
                        string query = "";
                        if (blnNgayCDen == true)
                        {
                            query = String.Format("delete from Ngay_Chuyen_Den where MaCDV = '{0}'", NgayCDenDto.MaCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        if (blnNgayCDi == true)
                        {
                            query = String.Format("delete from Ngay_Chuyen_Di where MaCDV = '{0}'", NgayCDiDto.MaCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        if (blnChucVu == true)
                        {
                            query = String.Format("delete from CongDoanVien_ChucVu where MaCDV = '{0}'", CDVienDto.MaCDV);
                            cmd.CommandText = query;
                            cmd.ExecuteNonQuery();
                        }

                        query = String.Format("delete from Cong_Doan_Vien where MaCDV = '{0}'", CDVienDto.MaCDV);
                        cmd.CommandText = query;
                        cmd.ExecuteNonQuery();

                        rs = themCDV(cmd, CDVienDto, NgayCDenDto, NgayCDiDto);
                    }
                    catch
                    {
                        transaction.Rollback();
                        if (cnn.State == ConnectionState.Open)
                        {
                            cnn.Close();
                        }
                        throw new Exception("thao tác cập nhật thông tin công đoàn viên bị lỗi");
                    }
                    transaction.Commit();
                    cnn.Close();
                }
            }
            return rs;
        }
        public static DataTable TimKiem(string maCDV, string strHoTen, ToCongDoanDTO toCDDto)
        {
            DataTable dt = new DataTable();

            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
                             
            try
            {
                string query = "select * from Cong_Doan_Vien cdv,To_Cong_Doan tcd,Ton_Giao tg,Dan_Toc dt where  cdv.tocongdoan = tcd.tocongdoanid and  cdv.dantoc = dt.dantocid and cdv.tongiao = tg.tongiaoid and ";
                if (maCDV != "")
                {
                    query += String.Format("MaCDV like '%{0}%' and ", maCDV);
                }
                if (strHoTen != "")
                {
                    query += String.Format("HoTen like '%{0}%' and ", strHoTen);
                }
                if (toCDDto.TenToCongDoan != "")
                {
                    query += String.Format("ToCongDoan = {0} and ", toCDDto.MaToCD);
                }
                query += "((1)=1)";

                OleDbDataAdapter da = new OleDbDataAdapter(query, cnn);

                da.Fill(dt);
            }
            catch
            {
                throw new Exception("thao tác tìm kiếm công đoàn viên bị lỗi");
            }
            return dt;
        }

        public static List<int> TimKiemChucVu(string maCDV)
        {
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string query = String.Format("select * from CongDoanVien_ChucVu where MaCDV = '{0}'", maCDV);
            OleDbCommand cmd = new OleDbCommand(query, cnn);

            List<int> lstChucVu = new List<int>();

            cnn.Open();
            try
            {
                OleDbDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    int maCV = (int)dr["MaCV"];
                    lstChucVu.Add(maCV);
                }
            }
            catch
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("thao tác tìm kiếm danh sách chức vụ công đoàn viên bị lỗi");
            }
            return lstChucVu;
        }

        public static DataTable ThongKe(string tinhTrang, double hesoluong, string tuNam, string denNam, string strHoTen, ToCongDoanDTO toCDDto)
        {
            DataTable dt = new DataTable();

            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();

            try
            {
                string query = "select * from Cong_Doan_Vien cdv,To_Cong_Doan tcd,Ton_Giao tg,Dan_Toc dt where  cdv.tocongdoan = tcd.tocongdoanid and  cdv.dantoc = dt.dantocid and cdv.tongiao = tg.tongiaoid and ";
                if (tinhTrang != "")
                {
                    query += String.Format("TinhTrang like '{0}' and ", tinhTrang);
                }
                if (strHoTen != "")
                {
                    query += String.Format("HoTen like '%{0}%' and ", strHoTen);
                }
                if (toCDDto.TenToCongDoan != "")
                {
                    query += String.Format("ToCongDoan = {0} and ", toCDDto.MaToCD);
                }
                if (hesoluong > 0)
                {
                    query += String.Format("HeSoLuong = {0} and ", hesoluong);
                }
                if (tuNam != "")
                {
                    query += String.Format("year(NTNS) between '{0}' and '{1}' and ", tuNam, denNam);
                }
                query += "((1)=1)";

                OleDbDataAdapter da = new OleDbDataAdapter(query, cnn);

                da.Fill(dt);
            }
            catch
            {
                throw new Exception("thao tác thống kê danh sách công đoàn viên bị lỗi");
            }
            return dt;
        }
    }
}

